#include <bits/stdc++.h>
using namespace std;

// 【题目】力扣1480. 一维数组的动态和
// 【难度】简单
// 【提交】2025.10.09 https://leetcode.cn/problems/running-sum-of-1d-array/submissions/669084938/
// 【标签】前缀和；数组
class Solution{
public:
    vector<int> runningSum(vector<int>& nums) {
        vector<int> res;
        int sum = 0;
        for(int i = 0; i < nums.size(); i++) {
            sum += nums[i];
            res.push_back(sum);
        }
        return res;
    }
};

/**
 * @brief 学习总结：
 * 一、题意与模型
 * 给定一个整数数组nums，返回该数组的动态和数组。
 * 动态和数组的定义：runningSum[i] = sum(nums[0]…nums[i])。
 * 模型：前缀和，通过累积计算得到每个位置的和。
 * 
 * 二、标准解法状态设计
 * 1. 初始化一个空的结果数组res。
 * 2. 使用变量sum记录当前累积和。
 * 3. 遍历数组，对于每个元素，更新sum并将其加入res。
 * 4. 返回结果数组res。
 * 
 * 三、你的实现思路
 * 使用简单的迭代和累积计算，在一次遍历中构建动态和数组。
 * 代码简洁直观，易于理解。
 * 
 * 四、逐行注释（带细节提醒）
 * vector<int> res; // 初始化结果数组
 * int sum = 0; // 初始化累积和
 * 
 * for(int i = 0; i < nums.size(); i++) { // 遍历数组
 *     sum += nums[i]; // 更新累积和
 *     res.push_back(sum); // 将当前累积和加入结果
 * }
 * return res; // 返回动态和数组
 * 
 * 五、正确性证明
 * 算法通过一次遍历，从左到右累积计算每个位置的和。
 * 对于每个位置i，res[i]确实等于nums[0]到nums[i]的和。
 * 
 * 六、复杂度
 * 时间：O(n)，只需遍历数组一次。
 * 空间：O(n)，需要额外的数组存储结果。
 * 
 * 七、优缺点分析
 * 优点：
 *   - 算法简单直观，易于理解和实现；
 *   - 时间复杂度最优，无法进一步优化；
 *   - 代码简洁，逻辑清晰。
 * 缺点：
 *   - 需要额外的空间存储结果；
 *   - 对于原地修改的要求，此实现不满足（但题目没有此要求）。
 * 
 * 八、改进建议
 * 1. 可以添加输入验证：if (nums.empty()) return {};
 * 2. 可以使用原地修改的方法节省空间：
 *    for (int i = 1; i < nums.size(); i++) {
 *        nums[i] += nums[i-1];
 *    }
 *    return nums;
 * 3. 使用更明确的变量名（如 runningSum 代替 res）来增强可读性。
 * 
 * 九、一句话总结
 * 前缀和技巧是解决"动态和数组"问题的直接方法，你的实现简洁高效，
 * 展现了基础算法思想的正确应用。
 */